package com.zhihaoliang.room.data

import androidx.room.*

/**
 * @author 支豪亮
 * @date 2023/1/31 09:18
 * @des 将特定列编入索引
 * 建立索引的目的是加快对表中记录的查找或排序。
 *
 * 为表设置索引要付出代价的：
 * 一是增加了数据库的存储空间，
 * 二是在插入和修改数据时要花费较多的时间(因为索引也要随之变动)。
 * 数据库索引就是为了提高表的搜索效率而对某些字段中的值建立的目录 。
 *
 * 注解的 unique 属性设为 true，强制实施此唯一性属性
 */

@Entity(tableName = "users_index" ,indices = [Index(value = ["first_name", "last_name"],
                         unique = true)])
data class UserIndex(
    @PrimaryKey val id: Int,
    @ColumnInfo(name = "last_name") val lastName: String?,
    @ColumnInfo(name = "first_name") val firstName: String?,

)

@Dao
interface UserIndexDao{
    @Insert(onConflict = OnConflictStrategy.REPLACE)
    suspend fun insertAll(users: List<UserIndex>)

    @Query("SELECT * FROM users_index WHERE last_name LIKE '%1%'")
    suspend fun queryLikeUsers() :List<UserIndex>

    @Insert
    suspend fun insert(Users:UserIndex)
}
